package com.nowcoder.community.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nowcoder.community.entity.LoginTicket;
import com.nowcoder.community.entity.User;

import java.util.Map;

/**
 * @author szq
 * @create 2023-01-18 22:24
 * @description
 */
public interface UserService extends IService<User> {

    User findUserById(int id);

    /**
     * 注册用户信息
     * @param user 用户信息
     * @return 注册结果信息
     */
    Map<String, Object> register(User user);

    /**
     * 处理激活请求
     * @param userId 用户Id
     * @param code 激活码
     * @return 激活状态：成功、失败、重复激活
     */
    int activation(int userId, String code);

    /**
     * 登录功能
     * @param username 用户名
     * @param password 密码
     * @param expiredSecond 过期时间
     * @return 登录响应信息
     */
    Map<String,Object> login(String username,String password,long expiredSecond);

    /**
     * 退出登录
     * @param ticket 凭证
     */
    void logout(String ticket);

    /**
     * 查找用户登录凭证
     * @param ticket
     * @return
     */
    LoginTicket findLoginTicket(String ticket);

    /**
     * 更新用户头像
     * @param userId 用户Id
     * @param headerUrl 头像地址
     * @return
     */
    int updateHeader(int userId,String headerUrl);

    /**
     * 修改密码
     * @param userId 用户id
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @return 修改密码状态信息
     */
    Map<String,Object> updatePassword(int userId,String oldPassword,String newPassword);

    //1.优先从缓存中取值
    User getCache(int userId);

    //2.取不到时初始化缓存数据
    User initCache(int userId);

    //3.数据变更时清除缓存数据
    void clearCache(int userId);

    User findUserByName(String username);
}
